package config

import (
	"fmt"
	"log"
	"os"

	// "github.com/golang-jwt/jwt"
	"qimo_work/models"

	"github.com/joho/godotenv" // 导入 godotenv 库
	"gorm.io/driver/mysql"     // 使用新的 mysql 驱动
	"gorm.io/gorm"             // 使用新的 gorm 包
)

var JwtSecret = []byte(os.Getenv("JWT_SECRET"))

var DB *gorm.DB

// 初始化数据库连接
func InitDB() {
	// 加载 .env 文件
	err := godotenv.Load("../.env")
	if err != nil {
		log.Fatalf("Error loading .env file: %v", err)
	}

	// 从环境变量中获取数据库连接信息
	dbUser := os.Getenv("DB_USER")
	dbPassword := os.Getenv("DB_PASSWORD")
	dbName := os.Getenv("DB_NAME")
	dbHost := os.Getenv("DB_HOST")
	dbPort := os.Getenv("DB_PORT")

	// 构建数据库连接字符串
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", dbUser, dbPassword, dbHost, dbPort, dbName)

	// 连接数据库
	var err2 error
	DB, err2 = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err2 != nil {
		log.Fatalf("failed to connect to database: %v", err)
	}

	// 自动迁移数据库表
	DB.AutoMigrate(&models.User{}, &models.Post{}, &models.Comment{}, &models.Category{}, &models.Tag{}, &models.Attachment{}, &models.PostLike{}, &models.PostFavorite{})
}

// 关闭数据库连接
func CloseDB() {
	sqlDB, err := DB.DB()
	if err != nil {
		log.Fatalf("failed to get db connection: %v", err)
	}
	if err := sqlDB.Close(); err != nil {
		log.Fatalf("failed to close database connection: %v", err)
	}
}
